"""
/**
 * 给定有序数组A和t，找到等于t的子段
 * x x x t t t y y y 
 * 0 0 0 1 1 1 1 1 1
 * 令函数为 t <= A[i] ? 1 : 0，则找出第一个为1的位置
 * 
 * x x x t t t y y y
 * 0 0 0 0 0 0 1 1 1
 * 再令函数为 t < A[i] ? 1 : 0，找出第一个为1的位置
 * 
 * 即可。注意区间不存在以及解不存在的情况
 */
"""
import bisect
class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        n = len(nums)
        if 0 == n: return [-1, -1]
        u = bisect.bisect_left(range(n), 1, key=lambda x: 1 if target <= nums[x] else 0)
        v = bisect.bisect_left(range(n), 1, key=lambda x: 1 if target < nums[x] else 0) - 1
        if u <= v: return [u, v]
        return [-1, -1]